package gaej.example.contact.client;

import java.util.List;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.HTMLTable.Cell;

/**
 * Entry point classes define onModuleLoad().
 */
public class MusicEntryPoint implements EntryPoint {
    private MenuGUI menuGui;

    private DirigentGUI dirigentGui;
    private DirigentDelegate dirigentDelegate;

    private ComponistGUI componistGui;
    private ComponistDelegate componistDelegate;
    
    private MuziekstukGUI muziekstukGui;
    private MuziekstukDelegate muziekstukDelegate;

    private UitvoeringGUI uitvoeringGui;
    private UitvoeringDelegate uitvoeringDelegate;
    /**
     * This is the entry point method.
     */
    public void onModuleLoad() {

    	menuGui = new MenuGUI();
    	menuGui.init();
    	wireMenuGUIEvents();

    	// dirigentGui aanmaken
        dirigentGui = new DirigentGUI();
        dirigentDelegate = new DirigentDelegate();
        dirigentGui.dirigentService = dirigentDelegate;
        dirigentDelegate.gui = dirigentGui;
        dirigentGui.init();
        dirigentGui.hideGui();
        wireDirigentGUIEvents();
        
    	// componistGui aanmaken
        componistGui = new ComponistGUI();
        componistDelegate = new ComponistDelegate();
        componistGui.componistService = componistDelegate;
        componistDelegate.gui = componistGui;
        componistGui.init();
        componistGui.hideGui();
        wireComponistGUIEvents();
        
    	// muziekstukGui aanmaken
        muziekstukGui = new MuziekstukGUI();
        muziekstukDelegate = new MuziekstukDelegate();
        muziekstukGui.muziekstukService = muziekstukDelegate;
        muziekstukDelegate.gui = muziekstukGui;
        muziekstukGui.init();
        muziekstukGui.hideGui();
        wireMuziekstukGUIEvents();

        // uitvoeringGui aanmaken
        uitvoeringGui = new UitvoeringGUI();
        uitvoeringDelegate = new UitvoeringDelegate();
        uitvoeringGui.uitvoeringService = uitvoeringDelegate;
        uitvoeringDelegate.gui = uitvoeringGui;
        uitvoeringGui.init();
        uitvoeringGui.hideGui();
        wireUitvoeringGUIEvents();
    }

    private void hideAllGui() {
        componistGui.hideGui();
        dirigentGui.hideGui();
        muziekstukGui.hideGui();
        uitvoeringGui.hideGui();
    }
    
    private void wireMenuGUIEvents() {
    	menuGui.dirigentButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	hideAllGui();
            	dirigentDelegate.listDirigenten();
            	// menuGui.gui_eventButtonClicked();
            }});
    	menuGui.componistButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	hideAllGui();
            	componistDelegate.listComponisten();
            	// menuGui.gui_eventButtonClicked();
            }});
    	menuGui.muziekstukButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	hideAllGui();
            	muziekstukDelegate.listMuziekstukken();
            	// menuGui.gui_eventButtonClicked();
            }});
    	menuGui.uitvoeringButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	hideAllGui();
            	uitvoeringDelegate.listUitvoeringen();
            	// menuGui.gui_eventButtonClicked();
            }});    }
    
    private void wireDirigentGUIEvents() {
    	dirigentGui.listGrid.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
                 Cell cellForEvent = dirigentGui.listGrid.getCellForEvent(event);
                 dirigentGui.gui_eventListGridClicked(cellForEvent);                
            }});
        
    	dirigentGui.addButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	dirigentGui.gui_eventAddButtonClicked();
            }});

    	dirigentGui.updateButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	dirigentGui.gui_eventUpdateButtonClicked();
            }});
        
    	dirigentGui.addNewButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	dirigentGui.gui_eventAddNewButtonClicked();
           }});
    }

    
    private void wireComponistGUIEvents() {
    	componistGui.listGrid.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
                 Cell cellForEvent = componistGui.listGrid.getCellForEvent(event);
                 componistGui.gui_eventListGridClicked(cellForEvent);                
            }});
        
    	componistGui.addButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	componistGui.gui_eventAddButtonClicked();
            }});

    	componistGui.updateButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	componistGui.gui_eventUpdateButtonClicked();
            }});
        
    	componistGui.addNewButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	componistGui.gui_eventAddNewButtonClicked();
            }});

    }
    
    private void wireMuziekstukGUIEvents() {
    	muziekstukGui.listGrid.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
                 Cell cellForEvent = muziekstukGui.listGrid.getCellForEvent(event);
                 muziekstukGui.gui_eventListGridClicked(cellForEvent);                
            }});
        
    	muziekstukGui.addButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	muziekstukGui.gui_eventAddButtonClicked();
            }});

    	muziekstukGui.updateButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	muziekstukGui.gui_eventUpdateButtonClicked();
            }});
        
    	muziekstukGui.addNewButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	muziekstukGui.gui_eventAddNewButtonClicked();
            }});

    }

    private void wireUitvoeringGUIEvents() {
    	uitvoeringGui.listGrid.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
                 Cell cellForEvent = uitvoeringGui.listGrid.getCellForEvent(event);
                 uitvoeringGui.gui_eventListGridClicked(cellForEvent);                
            }});
        
    	uitvoeringGui.addButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	uitvoeringGui.gui_eventAddButtonClicked();
            }});

    	uitvoeringGui.updateButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	uitvoeringGui.gui_eventUpdateButtonClicked();
            }});
        
    	uitvoeringGui.addNewButton.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
            	uitvoeringGui.gui_eventAddNewButtonClicked();
           }});
    }    
    
}
